home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / gnulib / libsrc98.zoo / l64a.c < prev    next >
C/C++ Source or Header  |  1994-03-29  |  1KB  |  59 lines

  1. #include <support.h>
  2. #include <errno.h>
  3. extern int errno;
  4.  
  5. #ifndef _COMPILER_H
  6. #include <compiler.h>
  7. #endif
  8.  
  9. static char i64a __PROTO((int i));  /* integer to base-64 char, 0x7F on error */
  10.  
  11. /* integer to base-64 char, 0x7F on error */
  12. static char i64a(i)
  13.   int i;
  14. {
  15.   char retval = (char)i;
  16.   
  17.   if ((i < 0) || (i > 63))
  18.   {
  19.     errno = EBADARG;
  20.     return(0x7F);
  21.   }
  22.   retval += '.';
  23.   if (i > 11)
  24.     retval += 'A' - '9' - 1;
  25.   if (i > 37)
  26.     retval += 'a' - 'Z' - 1;
  27.   return(retval);
  28. } /* End of i64a() */
  29.  
  30. /* long to base-64 string */
  31. char *l64a(l)
  32.   long l;
  33. {
  34.   static char retval[7];
  35.   char buffer[7], *ptr1 = buffer, *ptr2 = retval;
  36.   int counter = 0;
  37.  
  38.   if (l < 0)
  39.   {
  40.     errno = EBADARG;
  41.     return("");
  42.   }
  43.   if (l == 0)
  44.     return("");
  45.   while ((counter++ < 6) && (l > 0))
  46.   {
  47.     char val;
  48.     
  49.     if ((val = i64a((char)(l & 0x3F))) == 0x7F)
  50.       return(""); /* errno was set by i64a() */
  51.     *ptr1++ = val;
  52.     l >>= 6;
  53.   }
  54.   while (ptr1 > buffer)
  55.     *ptr2++ = *(--ptr1);
  56.   *ptr2 = 0x00;
  57.   return(retval);
  58. } /* End of l64a() */
  59.